package com.cskaoyan.javase.oop1._17pop;

/**
 * 语言的特性 vs 思想
 * 面向对象语言特性和面向对象思想不是一回事
 * 面向对象思想以"对象/个体"为程序开发的核心,Java/C++明确指出了对象的概念,所以它们都具有面向对象的语言特性
 * 但是只要以"个体"为核心开发程序,都算面向对象思想
 * C语言是没有明确的类,对象的概念的,所以C语言没有面向对象的语言特性
 * 但是只要找到一些结构,把这个结构看成是一个"个体/对象",以它为核心开发,同样可以写面向对象思想的程序
 *
 * @since 14:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 创建对象,实现功能
        Elephant e = new Elephant();
        Fridge f = new Fridge();
        e.eleF = f;
        System.out.println("现在开始把大象放进冰箱~");
        e.into();
        f.open();
        e.into();
        f.close();
        System.out.println("完毕~");
    }
}

// 大象类
class Elephant {
    Fridge eleF;
    // 大象有自己进冰箱的行为,当然前提是冰箱的门开着
    public void into() {
        if (eleF.state) {
            System.out.println("门开了,那我进来了,你快关门~");
            return;
        }
        System.out.println("快把门打开,我要进去了~");
    }
}

// 冰箱类
class Fridge {
    // 属性,用来指示冰箱门的状态,false表示关着,true表示开着
    boolean state = false;

    // 行为,开门和关门
    public void open() {
        state = true;
        System.out.println("冰箱门打开了,请🐘进来~");
    }

    public void close() {
        state = false;
        System.out.println("🐘进来了,那我关门了~");
    }
}